package shiro_03_authorization;

import java.util.Arrays;

import org.apache.shiro.subject.Subject;
import org.junit.Test;

import com.firewolf.permission.utils.ShiroUtil;

public class MainDriver {


	/**
	 * 判断是不是有某个角色 hasRole:判断有没有某个角色/某些权限 hashAnyRole:判断是否有某些权限中的某一个
	 * hasAllRoles:判断是不是有所有角色/权限
	 * checkRole/checkRoles和hasRole/hasAllRoles不同的地方是它没有返回值，
	 * 在判断为假的情况下会抛出UnauthorizedException异常
	 */
	@Test
	public void testHasRoles() {
		ShiroUtil.login("shiro-role.ini", "zhang", "123");
		Subject subject = ShiroUtil.getSubject();
		// hasXXX方式判断角色，有返回true，没有返回false
		// 判断是否具有单个角色
		boolean hasRole = subject.hasRole("role5");
		System.out.println(hasRole);
		// 判断您是否有所有角色，有一个不存在则返回false
		boolean hasAllRoles = subject.hasAllRoles(Arrays.asList("role1", "role3"));
		System.out.println(hasAllRoles);
		// 判断是否有某几个角色，返回的是一个数组
		boolean[] hasRoles = subject.hasRoles(Arrays.asList("role1", "role5"));
		System.out.println(Arrays.toString(hasRoles));

		// checkXXX的方式来判断角色，没有相应角色话，就抛出UnauthorizedException异常
		subject.checkRole("role5");
	}

	/**
	 * 判断是不是有某个权限 isPermitted:是不是具有某个权限 isPermittedAll:是不是具有所有权限
	 */
	@Test
	public void testHasPermissions() {
		ShiroUtil.login("shiro-permission.ini", "zhang", "123");
		Subject subject = ShiroUtil.getSubject();
		// 判断单个权限
		boolean permitted = subject.isPermitted("user:create");
		System.out.println(permitted);
		// 判断所有权限
		boolean permittedAll = subject.isPermittedAll("user:created", "user:deleted");
		System.out.println(permittedAll);
		// 判断各个权限的情况
		boolean[] permitted2 = subject.isPermitted("user:create", "user:delete", "user:list");
		System.out.println(Arrays.toString(permitted2));

		// 没有权限会报异常
		subject.checkPermission("user:list");
	}

}
